package org.acb.sgp.managedbeans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.acb.sgp.beans.*;
import org.acb.sgp.service.BusinessLayerService;
import org.acb.sgp.service.impl.BusinessLayerServiceImpl;
import org.acb.sgp.utils.FacesUtil;
import org.primefaces.event.FileUploadEvent;

@ManagedBean
@ViewScoped
public class LocacionBean implements Serializable {

	private static final long serialVersionUID = 1L;
	private final BusinessLayerService service = new BusinessLayerServiceImpl();
    private List<CategoriaLocacion> categorias;
    private List<Distrito> distritos;
    private Integer codCategoria;
    private String nombre;
    private List<Locacion> locaciones;
    private Locacion locacion;
    private List<ImagenLocacion> fotos;
    private String nomFoto;

    @PostConstruct
    public void init() {
        locacion = new Locacion();
        fotos = new ArrayList<ImagenLocacion>();
        categorias = service.listaCategorias();
        distritos = service.listaDistritos();
        locaciones = service.listaLocaciones();
    }

    public void buscar() {
        locaciones = service.buscarLocacionPorNombreCategoria(nombre, codCategoria);
    }

    public void nuevo() {
        locacion = new Locacion();
    }

    public void registrar() {
        try {
            locacion.setFlAlquiler(1);
            locacion.setFlPermiso(1);
            service.registrarLocacion(locacion);
            locaciones = service.buscarLocacionPorNombreCategoria(nombre, codCategoria);
            FacesUtil.closeDialog("registrar");
            FacesUtil.showMessage("LOCACION GUARDADA", FacesUtil.INFO);
        } catch (Exception e) {
            System.out.println("ERROR EN LocacionBean>registrar: " + e.toString());
        }
    }

    public void eliminar(Locacion pLocacion) {
        service.eliminarLocacion(locacion);
        FacesUtil.showMessage("LOCACION ELIMINADA", FacesUtil.INFO);
        locaciones = service.buscarLocacionPorNombreCategoria(nombre, codCategoria);
    }

    public void cargarFotos() {
        fotos = service.listaImagenesPorCodLocacion(locacion.getCodLocacion());
    }

    public void subirImagen(FileUploadEvent event) {
        byte[] imagen = event.getFile().getContents();
        ImagenLocacion imagenLocacion = new ImagenLocacion();
        imagenLocacion.setLocacion(locacion);
        imagenLocacion.setNomImagen(event.getFile().getFileName());
        service.registrarImagen(imagenLocacion);

        if (imagenLocacion.getCodImagen() != null) {
            String nombreImagen = imagenLocacion.getCodImagen() + "." + event.getFile().getFileName().substring(event.getFile().getFileName().length() - 3);
            String urlArchivo = "/temp/" + nombreImagen;
            FacesUtil.createFileOnProject(imagen, urlArchivo);

        }
        cargarFotos();
    }

    public void cargarURL(ImagenLocacion il) {
        nomFoto = il.getCodImagen() + "." + (il.getNomImagen().substring(il.getNomImagen().length() - 3));
    }

    public List<CategoriaLocacion> getCategorias() {
        return categorias;
    }

    public void setCategorias(List<CategoriaLocacion> categorias) {
        this.categorias = categorias;
    }

    public List<Distrito> getDistritos() {
        return distritos;
    }

    public void setDistritos(List<Distrito> distritos) {
        this.distritos = distritos;
    }

    public Integer getCodCategoria() {
        return codCategoria;
    }

    public void setCodCategoria(Integer codCategoria) {
        this.codCategoria = codCategoria;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public List<Locacion> getLocaciones() {
        return locaciones;
    }

    public void setLocaciones(List<Locacion> locaciones) {
        this.locaciones = locaciones;
    }

    public Locacion getLocacion() {
        return locacion;
    }

    public void setLocacion(Locacion locacion) {
        this.locacion = locacion;
    }

    public List<ImagenLocacion> getFotos() {
        return fotos;
    }

    public void setFotos(List<ImagenLocacion> fotos) {
        this.fotos = fotos;
    }

    public String getNomFoto() {
        return nomFoto;
    }

    public void setNomFoto(String nomFoto) {
        this.nomFoto = nomFoto;
    }

}
